// import com.alibaba.druid.sql.ast.SQLName_ptr ;
// import com.alibaba.druid.sql.ast.SQLSubPartitionBy;
// import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObject;
// import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.std::list;
#pragma once
#include <list>
#include "../../../../../sql/ast/SQLSubPartitionBy.h"
#include "../../../../../sql/dialect/mysql/ast/MySqlObject.h"
class SQLName;
class SQLASTVisitor;
class MySqlASTVisitor;

class MySqlSubPartitionByKey : public SQLSubPartitionBy, virtual public MySqlObject
{
public:
  int algorithm;
  SQLName_list_ptr columns;

  MySqlSubPartitionByKey();
  SHAREDOBJECT(MySqlSubPartitionByKey);

  // @Override
  void accept0(SQLASTVisitor_ptr visitor);

  // @Override
  void accept0(MySqlASTVisitor_ptr visitor);

  SQLName_list_ptr getColumns();

  void addColumn(SQLName_ptr column);

  void cloneTo(MySqlSubPartitionByKey_ptr x);

  // MySqlSubPartitionByKey* clone() ;
  virtual SQLObject_ptr clone();
  int getAlgorithm();

  void setAlgorithm(int algorithm);

  BOOL_ptr isPartitionByColumn(long columnNameHashCode64);
};
